package problem;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 *  只出现一次的数字：
 *  给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
 * </p>
 *
 * 解法：
 * 1）使用集合存储数字。遍历数组中的每个数字，如果集合中没有该数字，则将该数字加入集合，如果集合中已经有该数字，则将该数字从集合中删除，最后剩下的数字就是只出现一次的数字。
 * 2）哈希表存储次数
 * 3）结合
 * @authoer fangXK
 * @since 2020-07-30
 */
public class S_136 {
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> map=new HashMap<>();
        for(Integer i:nums){
            Integer count=map.get(i);
            count=(count==null)?1:++count;
            map.put(i,count);
        }
        for(Integer i:map.keySet()){
            Integer count=map.get(i);
            if(count==1) return i;
        }
        return -1;
    }

    public int singleNumber1(int[] nums) {
        int ans=nums[0];
        if(nums.length>1){
            for(int i=1;i<nums.length;i++){
                ans=ans^nums[i];
            }
        }
        return ans;
    }
}
